import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

# 解决中文显示问题
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题

data = pd.read_csv("./boston.csv")
data = data.to_numpy()
x = data[:, :-1]  # 特征
y = data[:, -1]   # 目标值（房价）

# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

# 训练线性回归模型
model = LinearRegression()
model.fit(x_train, y_train)

# 预测
y_predict = model.predict(x_test)

# 可视化真实值与预测值
plt.figure(figsize=(10, 6))
# 绘制真实值（红色圆点）
plt.plot(range(len(y_test)), y_test, "ro-", label="真实值")
# 绘制预测值（蓝色圆点）
plt.plot(range(len(y_test)), y_predict, "bo--", label="预测值")

plt.xlabel("样本索引")
plt.ylabel("房价")
plt.title("线性回归模型预测值与真实值对比")
plt.legend()  # 显示图例
plt.grid(alpha=0.3)  # 添加网格线
plt.show()
